package model

import (
	"database/sql"
	// "encoding/json"
	"fmt"
	// "reflect"
	_ "test/mysql"
	// _ "github.com/go-sql-driver/mysql"
)

//插入demo
func insert() {
	db, err := sql.Open("mysql", "root:123456@/xuexi?charset=utf8")
	checkErr(err)

	stmt, err := db.Prepare(`INSERT userinfo (username,departname,created) values (?,?,?)`)
	checkErr(err)
	res, err := stmt.Exec("tony", 20, 1)
	checkErr(err)
	id, err := res.LastInsertId()
	checkErr(err)
	fmt.Println(id)
}

type Serverslice struct {
	Servers []Server
}

type Server struct {
	ServerName string
	ServerIP   string
}

//查询demo
func Query() []string {
	db, err := sql.Open("mysql", "root:123456@/xuexi?charset=utf8")
	checkErr(err)

	query, _ := db.Query("SELECT * FROM userinfo")
	column, _ := query.Columns()              //读出查询出的列字段名
	values := make([][]byte, len(column))     //values是每个列的值，这里获取到byte里
	scans := make([]interface{}, len(column)) //因为每次查询出来的列是不定长的，用len(column)定住当次查询的长度
	for i := range values {                   //让每一行数据都填充到[][]byte里面
		scans[i] = &values[i]
	}
	results := make(map[int]map[string]string) //最后得到的map
	i := 0
	for query.Next() { //循环，让游标往下移动
		if err := query.Scan(scans...); err != nil { //query.Scan查询出来的不定长值放到scans[i] = &values[i],也就是每行都放在values里
			fmt.Println(err)
			return
		}
		row := make(map[string]string) //每行数据
		for k, v := range values {     //每行数据是放在values里面，现在把它挪到row里
			key := column[k]
			row[key] = string(v)
		}
		results[i] = row //装入结果集中
		i++
	}
	for _, v := range results { //查询出来的数组
		fmt.Println(v)
		return
	}
	// b, err := json.Marshal(results)
	// if err != nil {
	// 	fmt.Println("json err:", err)
	// }
	// fmt.Println("json:", b)
	// return results[1]
	// return string(results)

}

//更新数据
func update() {
	db, err := sql.Open("mysql", "root:123456@/xuexi?charset=utf8")
	checkErr(err)

	stmt, err := db.Prepare(`UPDATE userinfo SET username=? WHERE uid=?`)
	checkErr(err)
	res, err := stmt.Exec(21, 2, 1)
	checkErr(err)
	num, err := res.RowsAffected()
	checkErr(err)
	fmt.Println(num)
}

//删除数据
func remove() {
	db, err := sql.Open("mysql", "root:123456@/xuexi?charset=utf8")
	checkErr(err)

	stmt, err := db.Prepare(`DELETE FROM userinfo WHERE uid=?`)
	checkErr(err)
	res, err := stmt.Exec(1)
	checkErr(err)
	num, err := res.RowsAffected()
	checkErr(err)
	fmt.Println(num)
}
func checkErr(err error) {
	if err != nil {
		panic(err)
	}
}
